package top.mayyd.zuuldemo.fillter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.http.HttpStatus;

import javax.servlet.http.HttpServletRequest;

/**
 * 自定义的过滤器，用于校验登录权限
 */
public class LoginFillter extends ZuulFilter {
    //方式为前置拦截
    @Override
    public String filterType() {
        return "pre";
    }

    //设置过滤器顺序
    @Override
    public int filterOrder() {

        return 1;
    }

    @Override
    public boolean shouldFilter() {
        return true; //返回true，让过滤器生效
    }

    /**
     * 真正的校验逻辑
     * 这里的逻辑为：请求中如果有 access-token参数，才认为请求有效
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {
        //获取Zuul提供的请求上下文对象
        RequestContext ctx = RequestContext.getCurrentContext();
        //从上下文中获取request对象
        HttpServletRequest request = ctx.getRequest();
        //从请求中获取 access-token 参数，若取不到，不放行
        String token = request.getParameter("access-token");
        if (token == null || "".equals(token.trim())) {
            //拦截请求
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
        }

        //TODO 继续校验 token 是否正确，若通过可以取出对应的用户信息 放入 上下文对象，用于后续处理

        return null;
    }
}
